package com.ljm.sys.dict.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ljm.common.enums.DataStatus;
import com.ljm.common.enums.ResultStatus;
import com.ljm.common.excuption.Assert;
import com.ljm.common.page.PageDto;
import com.ljm.common.util.BeanUtils;
import com.ljm.common.util.StringUtil;
import com.ljm.sys.dict.api.SysDictItemApi;
import com.ljm.sys.dict.dto.SysDictItemDto;
import com.ljm.sys.dict.entity.SysDictItem;
import com.ljm.sys.dict.mapper.SysDictItemMapper;
import com.ljm.sys.dict.service.ISysDictItemService;
import com.ljm.sys.org.dto.SysOrgUserDto;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
    * 系统字段条目 服务实现类
    * </p>
 *
 * @author HuamingChen
 * @since 2019-02-14
 */
@Service
@Transactional
public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDictItem>
        implements ISysDictItemService, SysDictItemApi {

    @Override
    public void saveData(SysDictItemDto dto, SysOrgUserDto userDto) {
        SysDictItem po=new SysDictItem();
        BeanUtils.copyProperties(dto,po);
        if(StringUtil.isEmpty(dto.getId())){
            po.setCreateTime(LocalDateTime.now());
            po.setCreater(userDto.getLoginName());
            po.setStatus(DataStatus.NORMAL.getCode());
            po.setOrgId(userDto.getOrgId());
        }
        po.setEditor(userDto.getLoginName());
        po.setEditTime(LocalDateTime.now());
        this.saveOrUpdate(po);
    }

    @Override
    public void del(List<Long> ids) {
        if(StringUtil.isEmpty(ids)){
            Assert.throwException(ResultStatus.FIAL.getCode(),"主键集合为空");
        }
        this.removeByIds(ids);
    }

    @Override
    public SysDictItemDto getDataById(Long id) {
        if(StringUtil.isEmpty(id)){
            Assert.throwException(ResultStatus.FIAL.getCode(),"主键为空");
        }
        SysDictItemDto dto=new SysDictItemDto();
        SysDictItem po=this.getById(id);
        if(!StringUtil.isEmpty(po)){
            BeanUtils.copyProperties(po,dto);
        }
        return dto;
    }

    @Override
    public PageDto<SysDictItemDto> getByPage(String dictKey, String itemKey,
                                          String itemValue, Integer pageNo,
                                          Integer pageSize) {
        PageDto<SysDictItemDto> pageDto=new PageDto<>(pageNo,pageSize);
        IPage<SysDictItem> page=new Page<>(pageNo,pageSize);
        QueryWrapper<SysDictItem> wrapper=new QueryWrapper<>();
        if(!StringUtil.isEmpty(dictKey)){
            wrapper.eq("dict_key",dictKey);
        }
        if(!StringUtil.isEmpty(itemKey)){
            wrapper.like("item_key",itemKey);
        }
        if(!StringUtil.isEmpty(itemValue)){
            wrapper.like("item_value",itemValue);
        }
        wrapper.orderByDesc("edit_time");
        page=this.page(page,wrapper);
        if(!StringUtil.isEmpty(page.getRecords())){
            pageDto.setTotal(page.getTotal());
            pageDto.setRecords(BeanUtils.copyPropertiesByList(page.getRecords(),SysDictItemDto.class));
        }
        return pageDto;
    }

    @Override
    public List<SysDictItemDto> getItemByDictKey(String dictKey) {
        List<SysDictItemDto> list=new ArrayList<>();
        QueryWrapper<SysDictItem> wrapper=new QueryWrapper<>();
        wrapper.eq("dict_key",dictKey);
        List<SysDictItem> pos=this.list(wrapper);
        if(!StringUtil.isEmpty(pos)){
            list=BeanUtils.copyPropertiesByList(pos,SysDictItemDto.class);
        }
        return list;
    }
}
